iT邦幫忙

2021 iThome 鐵人賽

DAY 4
0

Container並不是輕量的VM,Container正確的來說是作業系統(OS)的"特殊進程",我們用GCP開台Ubuntu 16.04安裝Docker-CE來看看

sudo apt-get update
sudo apt-get -y install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
    
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
   
sudo apt-get update
sudo apt-get -y install docker-ce docker-ce-cli containerd.io

接著用 ps -A | grep -n docker 看一下這台VM,只有dockerd就是docker的守護進程docker daemon,docker daemon負責通過Docker Server模塊接受Docker Client的請求,並在Engine中處理請求,然後根據請求類型,創建出指定的container
https://ithelp.ithome.com.tw/upload/images/20210910/20098886JjcrVA54zg.png

接著我們開一台容器 ubuntu:16.04

sudo docker run -it ubuntu:16.04 bash

這時再回VM看一下一樣使用 ps -A | grep -n docker
https://ithelp.ithome.com.tw/upload/images/20210910/20098886RJKv5NFS8K.png

這時多了個進程名叫docker他的PID是5270,接著再進去ubuntu的docker容器看他有沒有省去OS

圖中可以看出來OS的file與lib都是在的,容器是有OS的file與lib,它所沒有的是OS的Kernel process,為了證明這件事我們在容器裡下ps -A
https://ithelp.ithome.com.tw/upload/images/20210910/20098886cKowPoWdfm.png

會發現只有兩個進程一個是ps一個是我們在前面docker run中下的bash,並沒系統進程在其中,我們回到VM下ps -A | wc -l計算進程數目
https://ithelp.ithome.com.tw/upload/images/20210910/20098886voBC2k5imr.png

你會發現VM執行了110個進程,因為它是VM需要跑OS Kernel process,而Docker不用,有些喜歡追根究底的朋友可能會問docker沒有跑OS Kernel process也能Run進程那我裝OS要幹嘛?事實上底層還是有OS的假如你的Docker安裝在VM上Docker就是跑VM的Guest OS,裝在物理機上Docker就是跑物理機的Host OS,這裡來了個問題?我們能在Windows底下Run Linux VM那能不能在Windows底下Run Linux Container?不能!因為底層的OS Kernel是Windows Kernel process,同理我們也沒法在ubuntu 8.04上跑ubuntu 20.04的Container因為核心版本太舊了。


上一篇
Day3-DotCloud? Docker?
下一篇
Day6-AI Performance
系列文
少年DevOps的K8s奇怪漂流7
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言